#include <algorithm>
#include <iostream>
using namespace std;

const int kMaxN = 1010;
const int kMaxK = 1010;
const int kMod = 998244353;

int f[2][kMaxN];

int QuickPow(int a, int b) {
  int ret = 1;

  for (; b; b >>= 1) {
    if (b & 1) {
      ret = (long long)ret * a % kMod;
    }
    a = (long long)a * a % kMod;
  }
  return ret;
}

void Add(int& a, int b, int c) {
  a = (a + (long long)b * c) % kMod;
}

int Move(int p, int n) {
  return p <= n ? p : 2 * n - p;
}

int Solve(int n, int m, int k) {
  int last = 0, now = 1;
  int ans = 0, invm = QuickPow(m, kMod - 2);

  f[0][0] = 1;
  for (int i = 0; i < k; i++) {
    fill(f[now], f[now] + n + 1, 0);
    for (int j = 0; j < n; j++) {
      if (f[last][j] == 0) {
        continue;
      }
      for (int d = 1; d <= m; d++) {
        Add(f[now][Move(j + d, n)], f[last][j], invm);
      }
    }
    Add(ans, f[now][n], 1);
    swap(last, now);
  }
  return ans;
}

int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  int n, m, k;
  cin >> n >> m >> k;
  cout << Solve(n, m, k) << "\n";
  return 0;
}